`timescale 1ns / 1ps
/////////////////////////////////////////////////////////////////////////////
////                                                                     ////
//// Instituto Tecnologico de Costa Rica                                 ////
////                                                                     ////
//// Parametros de Tiempo                                                ////
////                                                                     ////
//// Este archivo es parte del proyecto: Control de luces de semaforo    ////
//// http://repositorio-charmander.googlecode.com/svn/trunk/             ////
////                                                                     ////
//// Descripcion                                                         ////
//// Implementacion de un control de luces de semaforo como un proyecto  ////
//// del curso de Taller de Diseo Logico.                               ////
////                                                                     ////
//// Funcionamiento:                                                     ////
//// - Asignan los valores de tyel, tbase, text segun el tiempo que el   ////
////   usuario asigne.                                                   ////
////                                                                     ////                                    
//// Autores:                                                            ////
//// - Gia Chen, kathya0812@gmail.com                                    ////
////   Edgar Rojas, edtec217@gmail.com                                   ////
////                                                                     ////
/////////////////////////////////////////////////////////////////////////////

module Time_Parameters(_clk_i, _sync_rst_i, Time_Value_i, Time_Parameter_Selector_i, 
       prog_sync_i, interval_i, value_o);
		 
		 //ENTRADAS
		 input _clk_i, _sync_rst_i;
		 input [3:0] Time_Value_i;
		 input [1:0] Time_Parameter_Selector_i;
		 input [1:0] interval_i;
		 input prog_sync_i;
		 
		 //SALIDAS
		 output reg [3:0] value_o;
		 
		 //VARIABLES LOCALES
		 reg[3:0] tbase = 6;
		 reg[3:0] text = 3;
		 reg[3:0] tyel = 2;
		 
		 //Se verifica cada vez que el clock hace una transicion hacia el flanco positivo.
		 always@(posedge _clk_i)
			begin			
				if (_sync_rst_i)//Si se hace un reset se ponen los valores por defecto a las variables locales
					begin
						tbase <= 3'b110;
						text <= 3'b011;
						tyel <= 3'b010;
					end
				else if (prog_sync_i)//Si se recibe la se;al de reprogramar
					begin
					if ((Time_Value_i > 0) && (Time_Value_i < 16))
						begin
							if(Time_Parameter_Selector_i == 0)
						
							//2'b00:
								begin
									tbase <= Time_Value_i;
									tyel <= tyel;
									text <= text;
								end
							else if(Time_Parameter_Selector_i == 1)
								begin
									tbase <= tbase;
									tyel <= tyel;
									text <= Time_Value_i;
								end
							else if(Time_Parameter_Selector_i == 2)
								begin
									tbase <= tbase;
									tyel <= Time_Value_i;
									text <= text;
								end
							else
								begin
									tbase <= 3'b110;
									text <= 3'b011;
									tyel <= 3'b010;
								end
						//endcase
					end
					else
						begin
							tbase <= 3'b110;
							text <= 3'b011;
							tyel <= 3'b010;
						end
				end//fin del else if
			end //fin del always
				
		always@(posedge _clk_i)
			begin
				case (interval_i)//Se;al que recibe de la FSM e indica a este modulo el tiempo que necesita.
					2'b00: value_o <= tbase;
					2'b01: value_o <= text;
					2'b10: value_o <= tyel;
					default
						value_o <= tbase;
				endcase
					
			end
					
endmodule
